from datetime import datetime
from comment.models import db
from werkzeug.security import generate_password_hash, check_password_hash
# generate_password_hash 生成密文
# check_password_hash  检查密文

# 用户的模型类
class User(db.Model):
    __tablename__ = 't_user'
    id = db.Column(db.BIGINT, primary_key=True, autoincrement=True) # 主键  自增
    username = db.Column(db.String(64), doc="用户名")  # doc="用户名" 注释
    # 数据库中的密码，存放的必须加密之后的是密文，采用flask提供的hash算法：生成一个128位的密文 db.String(128)
    password = db.Column(db.String(128), doc="密码")  # doc 注释
    icon = db.Column(db.String(5000), doc="图像")  # doc 注释
    email = db.Column(db.String(100), doc="邮箱")  # doc 注释
    nick_name = db.Column(db.String(200), doc="昵称")  # doc 注释
    note = db.Column(db.String(500), doc="备注")  # doc= 注释
    phone = db.Column(db.String(11), doc="手机号")  # doc 注释

    login_time = db.Column(db.DateTime, default=datetime.now(), doc="登录时间")
    create_time = db.Column(db.DateTime, default=datetime.now(), doc="注册时间")
    update_time = db.Column(db.DateTime, default=datetime.now(), onupdate=datetime.now(), doc="用户修改时间")
    status = db.Column(db.Integer, doc="用户状态") # 0 表示正常


    # 是一个pwd属性的getter函数
    @property
    def pwd(self):
        return self.password

    # 是一个pwd的setter函数
    @pwd.setter
    def pwd(self, x_password):
        """
        根据明文的密码，传换成密文
        :param x_password: 密码明文
        :return:    密码的密文
        """
        self.password = generate_password_hash(x_password)


    def check_password(self, x_password):
        """
        验证密码
        :param x_password:  明文
        :return:
        """
        return check_password_hash(self.password, x_password)

